package com.form;

import com.util.AESUtil;
import com.util.SHAUtil;
import com.主程序;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

public class 登录 {
    public JFrame frame;
    public JPanel panel;
    private JLabel label0;
    private JButton 确定Button;
    private JPasswordField 请输入登录密码PasswordField;

    /**
     * 登录采用SHA256盐值加密
     * @param 调用位置 用于区分是在哪个地方调用显示这个窗口的：1 主程序 2 主页
     */
    public 登录(int 调用位置) {
        //String path = System.getProperty("user.dir")+"/密码管理器.txt";// 打包用的路径，和jar是同级
        String path = System.getProperty("user.dir")+"/密码管理器/密码管理器.txt";
        File file = new File(path);
        if (!file.exists()) {
            label0.setText("第一次使用请先设置登录密码");
        }
        确定Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    String next = new String(请输入登录密码PasswordField.getPassword());
                    if (!AESUtil.isNotBlank(next)){
                        AESUtil.tips("请先输入登录密码！");
                    }else {
                        if (!file.exists()){ // 如果路径不存在这个文件，要求用户设置使用该应用程序的密码
                            String salt = SHAUtil.generateSalt(); // 生成盐值
                            String password = SHAUtil.getEncryptedPassword(next, salt); // 得到密文
                            password = password + AESUtil.separate + salt;
                            AESUtil.写入内容(path,null,password);
                            AESUtil.tips("登录密码设置成功！");
                            file.setReadOnly(); // 只读
                            Runtime.getRuntime().exec("attrib +H \"" + file.getAbsolutePath() + "\""); // 隐藏
                            AESUtil.登录密码 = next;
                            AESUtil.密文 = password;
                        }else {
                            String 密文 = AESUtil.读取登录密码(path);
                            String[] split = 密文.split(AESUtil.separate);
                            boolean authenticate = SHAUtil.authenticate(next,split[0], split[1]);
                            if (!authenticate){
                                AESUtil.tips("登录密码错误！无法使用本程序！");
                                System.exit(0);
                            }
                            AESUtil.登录密码 = next;
                            if (调用位置 == 1){ // 在主程序登录时，给个提示
                                AESUtil.tips("登录成功！");
                            }
                        }
                        frame.setVisible(false); // 隐藏当前登录窗口
                        if (调用位置 == 1){
                            主程序.主页Form(); // 加载加密窗口
                        }
                    }
                }catch (Exception ex){
                    ex.printStackTrace();
                    AESUtil.tips("登录密码错误！无法使用本程序！");
                    System.exit(0);
                }
            }
        });
    }
}
